﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Timers;

using PEMS.Common;

namespace PEMS.Server
{
    class PServer
    {
        static ServerController SC=new ServerController();

        static void Main(string[] args)
        {
            Log.setLogFile("log.txt");
            // timer a GC-hez
            System.Timers.Timer gcTimer = new System.Timers.Timer(200);

            gcTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            gcTimer.Interval = 200;
            gcTimer.Enabled = true;

            //Intezmeny.adatfelolvasas(Properties.Settings.Default.data_path);

            ServiceHost host = new ServiceHost(typeof(PemsService));
            host.Open();
            foreach (ServiceEndpoint e in host.Description.Endpoints)
            {
                string s = string.Format("{0} ({1})", e.Address.ToString(), e.Binding.Name);
                Log.logToFile(s,false);
            }
            Log.logToFile("A szolgáltatás fut (Enter: stop)",false);
            
            fomenu();

            //Intezmeny.adatKiiras(Properties.Settings.Default.data_path);

        }


        public static void fomenu()
        {
            int selector = -1;
            bool exit = false;
            bool good = false;

            do
            {
                header();

                Console.WriteLine("1 : Bejelentkezett felhasználók listázása");

                Console.WriteLine("5 : Adatok alaphelyzetbe állítása (memóriában)");
                Console.WriteLine("8 : Adatfelolvasás (merevlemezről)");
                Console.WriteLine("9 : Adatmentés (merevlemezre)");

                Console.WriteLine("0 : Kilepes ");

                menualattisor();

                good = int.TryParse(Console.ReadLine(), out selector);
                if (good)
                {
                    switch (selector)
                    {

                        case 1:
                            lock (Intezmeny._lock)
                            {
                                foreach (KeyValuePair<string, N_1> kvp in Intezmeny.instance.authenticated)
                                {
                                    Console.WriteLine("{0}--{1}--{2}", kvp.Value.strings["userNev"], kvp.Value.strings["id"], kvp.Value.strings["ip"]);
                                }
                                Console.ReadLine();
                            }
                            break;


                        case 5:
                            SC.mintaadat_gyartas();
                            Console.WriteLine("Adatok betöltve - folytatáshoz enter");
                            Console.ReadLine();
                            break;

                        case 8:
                            SC.adatfelolvasas(Properties.Settings.Default.data_path);
                            break;

                        case 9:
                            SC.adatKiiras(Properties.Settings.Default.data_path);
                            break;

                        case 0:
                            exit = true;
                            break;

                        default:
                            break;
                    }
                }
                else
                {
                    Console.WriteLine("Nincs ilyen menupont!");
                }


            } while (!exit);
            Console.WriteLine("exit");
        }

        private static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            GC.Collect();
        }

        /// <summary>
        /// konzok ablak első két sora
        /// </summary>
        public static void header()
        {
            int consoleWidth = Console.WindowWidth;
            Console.Clear();
            Console.SetCursorPosition(0, 0);
            Console.Write("PEMS - Server");
            
            Console.WriteLine("");

            for (int i = 0; i < consoleWidth; i++)
            {
                Console.Write("-");
            }
            //Console.WriteLine("");

        }

        /// <summary>
        /// menü alá elválasztás
        /// </summary>
        public static void menualattisor()
        {
            int consoleWidth = Console.WindowWidth;

            //Console.WriteLine("");

            for (int i = 0; i < consoleWidth; i++)
            {
                Console.Write("-");
            }
            //Console.WriteLine("");

        }
    }

   
}
